Show Code
# The usual imports
import altair as alt
import geopandas as gpd
import numpy as np
import pandas as pd
from matplotlib import pyplot as plt# The usual imports
import altair as alt
import geopandas as gpd
import numpy as np
import pandas as pd
from matplotlib import pyplot as plt# Show all columns in dataframes
pd.options.display.max_columns = 999
# Hide warnings due to issue in shapely package
# See: https://github.com/shapely/shapely/issues/1345
np.seterr(invalid="ignore"){'divide': 'warn', 'over': 'warn', 'under': 'ignore', 'invalid': 'warn'}
Great source of data: street networks and a wealth of amenity information
https://www.openstreetmap.org
Related: interactive web maps in Python
Relatively new package (just a few years old), but quickly becoming the go to package for working with street networks and OpenStreetMap data in Python.
Several key features:
Downloading political boundaries for cities, states, countries, etc
Downloading street networks
Analyzing networks: routing, visualization, statistics
# !pip install osmnximport osmnx as oxKey function: geocode_to_gdf() (docs)
We can get the boundary for anything identified as a “place” by OSM.
Important: Be careful to pass the right place name that OSM needs
philly = ox.geocode_to_gdf("Philadelphia, PA")
philly.head()| geometry | bbox_west | bbox_south | bbox_east | bbox_north | place_id | osm_type | osm_id | lat | lon | class | type | place_rank | importance | addresstype | name | display_name | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | POLYGON ((-75.28027 39.97496, -75.28023 39.974... | -75.280266 | 39.867005 | -74.955831 | 40.137959 | 331386626 | relation | 188022 | 39.952724 | -75.163526 | boundary | administrative | 16 | 0.766493 | city | Philadelphia | Philadelphia, Philadelphia County, Pennsylvani... |
philly.crs<Geographic 2D CRS: EPSG:4326>
Name: WGS 84
Axis Info [ellipsoidal]:
- Lat[north]: Geodetic latitude (degree)
- Lon[east]: Geodetic longitude (degree)
Area of Use:
- name: World.
- bounds: (-180.0, -90.0, 180.0, 90.0)
Datum: World Geodetic System 1984 ensemble
- Ellipsoid: WGS 84
- Prime Meridian: Greenwich
We can plot it just like any other GeoDataFrame
# Project it to Web Mercator first and plot
ax = philly.to_crs(epsg=3857).plot(facecolor="none", edgecolor="black")
ax.set_axis_off()
Key function: project_gdf() (docs)
Automatically projects to the Universal Transverse Mercator (UTM) CRS for the UTM zone that the centroid of the polygon lies in
A good, general projection that works for most latitudes except very northern locations.
# ax = ox.project_gdf(philly).plot(fc="lightblue", ec="gray")
# ax.set_axis_off()
import geopandas as gpd
# Reproject philly to its best UTM zone
philly_proj = philly.to_crs(philly.estimate_utm_crs())
# Plot
ax = philly_proj.plot(fc="lightblue", ec="gray")
ax.set_axis_off()
Some more examples:
# Some examples
place1 = ox.geocode_to_gdf("Manhattan, New York City, New York, USA")
place2 = ox.geocode_to_gdf("Miami-Dade County, Florida")
place3 = ox.geocode_to_gdf("Florida, USA")
place4 = ox.geocode_to_gdf("Spain")# # Manhattan
# ax = ox.project_gdf(place1).plot(fc="lightblue", ec="gray")
# ax.set_axis_off()
# Reproject philly to its best UTM zone
place1_repoj = place1.to_crs(place1.estimate_utm_crs())
ax = place1_repoj.plot(fc="lightblue", ec="gray")
ax.set_axis_off()
# # Miami-Dade County
# ax = ox.project_gdf(place2).plot(fc="lightblue", ec="gray")
# ax.set_axis_off()
# Reproject philly to its best UTM zone
place2_repoj = place2.to_crs(place2.estimate_utm_crs())
ax = place2_repoj.plot(fc="lightblue", ec="gray")
ax.set_axis_off()
# # Florida
# ax = ox.project_gdf(place3).plot(fc="lightblue", ec="gray")
# ax.set_axis_off()
# Reproject philly to its best UTM zone
place3_repoj = place3.to_crs(place3.estimate_utm_crs())
ax = place3_repoj.plot(fc="lightblue", ec="gray")
ax.set_axis_off()
# # Spain
# ax = ox.project_gdf(place4).plot(fc="lightblue", ec="gray")
# ax.set_axis_off()
# Reproject philly to its best UTM zone
place4_repoj = place4.to_crs(place4.estimate_utm_crs())
ax = place4_repoj.plot(fc="lightblue", ec="gray")
ax.set_axis_off()
Key functions: features_from_*
features_from_place() (docs)
features_from_address() (docs)
features_from_bbox() (docs)
features_from_point() (docs)
features_from_polygon() (docs)
Important reference: https://wiki.openstreetmap.org/wiki/Map_Features
In the language of OSM, the “key” is the main feature category (e.g., amenity) and the “value” is the sub-category type (e.g., “bar”)
osmnx mirrors the key/value syntax of OSM. Use a dict to specify the features you want:
# Get all amenities in Philadelphia
amenities = ox.features_from_place("Philadelphia, PA", tags={"amenity": True})len(amenities)15722
amenities.head()| geometry | amenity | brand | brand:wikidata | name | operator | operator:wikidata | operator:wikipedia | short_name | addr:city | addr:housenumber | addr:postcode | addr:state | addr:street | air_conditioning | branch | cuisine | official_name | opening_hours | phone | ref | takeaway | website | created_by | source | alt_name | atm | contact:facebook | diet:vegetarian | payment:cash | payment:credit_cards | payment:debit_cards | wheelchair | brand:website | healthcare | internet_access | url | contact:phone | description | wikidata | brewery | contact:instagram | diet:vegan | education | ele | gnis:feature_id | religion | check_date | denomination | building | old_name | comment | operator:type | school | wikipedia | service_times | historic:amenity | name:en | social_facility | operator:short | operator:website | emergency | healthcare:speciality | bicycle_parking | capacity | covered | library | ref:isil | addr:country | callsign | studio | craft | microbrewery | outdoor_seating | drive_through | check_date:opening_hours | contact:website | reservation | website:menu | addr:unit | internet_access:fee | shop | training | toilets:wheelchair | contact:linkedin | contact:tiktok | contact:twitter | addr:housename | delivery | indoor_seating | bottle | fountain | collection_times | parking | self_service | dispensing | opening_hours:drive_through | opening_hours:signed | screen | payment:coins | smoking | architect | artist_name | wikimedia_commons | female | fee | check_date:opening_hours:drive_through | contact:myspace | fax | bar | designation | tourism | source:pkey | fixme | access | changing_table | toilets | name:zh | addr:full | mobile | charge | panoramax | fuel:biodiesel | fuel:biogas | fuel:cng | fuel:diesel | fuel:e10 | fuel:e85 | fuel:electricity | sport | collection_times:signed | ref:signed | drive_in | compressed_air | check_date:collection_times | food | cash_in | indoor | toilets:access | not:brand:wikidata | diet:halal | opening_hours:atm | payment:apple_pay | payment:contactless | toilets:handwashing | toilets:handwashing:soap | check_date:diet:vegan | diet:organic | diet:meat | image:menu | image:menu:0 | image:menu:1 | image:menu:2 | panoramax:0 | leisure | drink:club-mate | car_wash | note | bicycle_rental | kiosk | min_age | network | network:wikidata | owner | owner:wikidata | ownership | payment:app | rental | sponsor | sponsor:wikidata | toilets:disposal | opening_hours:bar | opening_hours:kitchen | diet:pescetarian | lgbtq | park_ride | supervised | power_supply | addr:place | flickr | was:shop | contact:email | youtube | source:cuisine | disused:shop | toilets:position | male | maxheight | wheelchair:description | wheelchair:description:en | internet_access:ssid | layer | service:bicycle:chain_tool | service:bicycle:pump | currency:USD | drink:coca-cola | drink:coke | drink:cola | drink:cola_zero | drink:soda | drink:water | vending | network:wikipedia | amenity_1 | recycling:computers | recycling:tv_monitor | recycling_type | ferry | public_transport | entrance | toilets:unisex | kitchen_hours | animal | fixme:atp | website:orders | website:reservation | check_date:wheelchair | backrest | street_vendor | service:bicycle:repair | payment:cards | name:es | diet:kosher | social_facility:for | theatre:genre | beds | level | payment:visa | was:name | happy_hours | opening_hours:brunch | opening_hours:dinner | opening_hours:lunch | direction | office | date | display | faces | armrest | seats | material | name:ca | addr:city:ar | name:ar | service:bicycle:tools | colour | brand:type | parcel_locker:type | parcel_mail_in | parcel_pickup | waste | historic | artwork_type | start_date | support | type | payment:american_express | payment:discover_card | payment:mastercard | dog | recycling:beverage_cartons | recycling:cans | recycling:glass_bottles | recycling:paper | recycling:plastic | recycling:plastic_bottles | recycling:plastic_packaging | contact:yelp | portable | seasonal | unisex | internet_access:description | man_made | particle_accelerator | substance | payment:cheque | heritage | clock | inscription | inscription:1 | panoramax:1 | bus | tram | opening_hours:bottle_shop | barrier | public_bookcase:type | check_date:capacity | payment:cash_app | payment:venmo | seating | currency:XBT | theatre:type | smoothness | surface | opening_hours:Condesa | opening_hours:El_Cafe | opening_hours:El_Techo | shelter_type | currency:BCH | manufacturer | payment:onchain | cash_out | brand:en | brand:zh | location | lit | drinking_water | height | fridge | opening_hours:covid19 | diet:healthy | abandoned:amenity | artwork_subject | memorial | subject:wikidata | payment:lightning | payment:lightning_contactless | delivery:partner | internet_access:password | post_box:type | check_date:diet:vegetarian | description:en | check_date:currency:XBT | check_date:smoking | phone:mnemonic | addr:door | was:amenity | urgent_care | community_centre:for | community_centre | animal_shelter | brand:short | disused:amenity | cash | name:etymology | name:etymology:wikidata | image | operator:short_name | automated | social_centre:for | cash_withdrawal | nobrand | recycling:clothes | animal_training | parking_space | bike_ride | bin | polling_station | shop:music:vinyl | books | manufacturer:wikidata | model | model:ref | addr:floor | diet | survey:date | former:shop | cafe | contact:bluesky | website:booking | fuel | nursery | preschool | diet:gluten_free | int_name | old_ref | mimics | fast_food | gender_segregated | heating | live_music | was:addr:housenumber | healthcare:for | tactile_paving | animal_boarding | recycling:waste | authentication:app | bicycle | frequency | hgv | maxstay | motorcar | network:website | payment:app:tesla | ref:supercharge_info | scooter | socket:nacs | socket:nacs:output | diet:mediterranean | landuse | restaurant | seeds | building:levels | capacity:disabled | building:floor | ref:nrhp | building:material | roof:levels | roof:shape | vehicle | natural | water | building:use | lanes | ship:type | wifi | orientation | name:he | source:name | basilica | diocese | website:en | roof:material | access:conditional | rite | heritage:operator | building:architecture | heritage:website | contact:mastodon | architect:wikidata | building:levels:underground | nrhp:criteria | nrhp:inscription_date | building:colour | ref:dove | check_date:compressed_air | nonsquare | name:ja | name:zn | roof:orientation | demolished:building | historic:name | grades | farm_boxes | disused:name | post_office | building:part | monastery:type | theme | bench | loc_name | drink | subdenomination | police | was:cuisine | was:delivery | was:drive_through | was:outdoor_seating | was:takeaway | school:type | old_name1 | old_name2 | elevation | fuel:octane_95 | fuel:gasoline | fuel:octane_87 | healthcare:counselling | parking:orientation | area | protection_title | source_ref | country | house | diet:lacto_vegetarian | name:vi | isced:level | pedagogy | school:gender | statue | crossing:markings | ||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| element | id | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| node | 109811385 | POINT (-75.19487 40.05846) | bench | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
| 110237774 | POINT (-75.15662 39.9504) | parking_entrance | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | |
| 274216093 | POINT (-75.19125 39.95764) | atm | Citibank | Q857063 | Citibank | Citibank | Q857063 | en:Citibank | Citi | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | |
| 274217596 | POINT (-75.19229 39.95301) | cafe | Starbucks | Q37158 | Starbucks | NaN | NaN | NaN | NaN | Philadelphia | 3401 | 19104 | PA | Walnut Street | yes | Walnut & 34th | coffee_shop | Starbucks Coffee | Mo-Fr 05:30-20:00; Sa,Su 06:00-20:00 | +1-215-387-1914 | 14716 | yes | https://www.starbucks.com/store-locator/store/... | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | |
| 313440966 | POINT (-75.16694 39.96394) | car_sharing | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | Potlatch 0.10f | local_knowledge | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
# Get all bars in philadelphia
bars = ox.features_from_place("Philadelphia, PA", tags={"amenity": "bar"})len(bars)165
bars.head()| geometry | addr:housenumber | addr:street | amenity | contact:phone | contact:website | description | name | opening_hours | outdoor_seating | check_date | contact:facebook | addr:postcode | phone | website | addr:city | air_conditioning | smoking | toilets:wheelchair | wheelchair | check_date:opening_hours | opening_hours:signed | indoor_seating | contact:instagram | leisure | sport | lgbtq | access | brand | brand:wikidata | wheelchair:description | opening_hours:kitchen | addr:state | branch | cuisine | fixme | name:en | name:es | addr:unit | craft | heritage | wikidata | wikipedia | brewery | min_age | opening_hours:bottle_shop | operator | alt_name | height | source | internet_access | website:menu | landuse | microbrewery | restaurant | atm | building | building:levels | food | nonsquare | shop | contact:tiktok | contact:twitter | level | designation | |||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| element | id | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| node | 1033935437 | POINT (-75.17552 39.95242) | 2101 | Chestnut Street | bar | +1 215-568-3355 | https://mixbarandgrillphilly.com/location/mix-... | The bar is open until whenever the rush ends. | Mix Bar & Grill | Mo-We,Su 11:00-22:00; Th-Sa 11:00-23:00 | yes | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
| 1167079387 | POINT (-75.14925 39.9417) | 401 | South Street | bar | +1 215-925-6455 | https://www.milkboy.tv/southstreet | NaN | MilkBoy South Street | Mo-Tu,Su 11:00-24:00; We-Sa 11:00-25:00 | NaN | 2023-04-12 | https://www.facebook.com/milkboysouthstreet | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | |
| 1204761128 | POINT (-75.16363 39.92685) | NaN | NaN | bar | NaN | NaN | NaN | Vikings High School Club | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | |
| 1424271155 | POINT (-75.14909 39.94152) | 344 | South Street | bar | NaN | NaN | NaN | Copabanana | Mo-Su 11:30-02:00 | NaN | NaN | NaN | 19147 | +1 215-923-6180 | https://copabanana.com/ | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | |
| 1475230378 | POINT (-75.14002 39.96627) | 1001 | North 2nd Street | bar | NaN | NaN | NaN | Gunner's Run | Mo-Su 11:00-02:00 | NaN | NaN | NaN | 19123 | +1 215-923-4600 | http://gunnersrun.com/ | Philadelphia | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
# Get bar, pub, and restaurant features in Philadelphia
food_and_drink = ox.features_from_place(
"Philadelphia, PA", tags={"amenity": ["pub", "bar", "restaurant"]}
)len(food_and_drink)1155
food_and_drink.head()| geometry | addr:city | addr:housenumber | addr:postcode | addr:state | addr:street | alt_name | amenity | atm | contact:facebook | cuisine | diet:vegetarian | name | opening_hours | payment:cash | payment:credit_cards | payment:debit_cards | source | wheelchair | brewery | contact:instagram | diet:vegan | phone | website | check_date | craft | microbrewery | outdoor_seating | brand | brand:wikidata | check_date:opening_hours | contact:website | reservation | website:menu | contact:phone | contact:twitter | internet_access | self_service | indoor_seating | opening_hours:signed | description | wikimedia_commons | air_conditioning | smoking | bar | designation | takeaway | addr:housename | toilets:wheelchair | short_name | name:zh | sport | delivery | drive_in | food | not:brand:wikidata | toilets | diet:halal | addr:country | drive_through | branch | official_name | diet:organic | diet:meat | image:menu | image:menu:0 | image:menu:1 | image:menu:2 | panoramax | panoramax:0 | leisure | opening_hours:bar | opening_hours:kitchen | operator | diet:pescetarian | lgbtq | source:cuisine | access | wheelchair:description | ref | amenity_1 | capacity | fax | kitchen_hours | wikidata | fixme | website:orders | website:reservation | name:en | street_vendor | addr:unit | name:es | was:name | level | note | happy_hours | opening_hours:brunch | opening_hours:dinner | opening_hours:lunch | payment:apple_pay | payment:cards | payment:contactless | name:ca | internet_access:fee | payment:american_express | payment:discover_card | payment:mastercard | payment:visa | start_date | contact:yelp | internet_access:description | internet_access:ssid | heritage | wikipedia | min_age | opening_hours:bottle_shop | opening_hours:Condesa | opening_hours:El_Cafe | opening_hours:El_Techo | diet:healthy | delivery:partner | toilets:access | height | check_date:smoking | phone:mnemonic | diet:gluten_free | was:addr:housenumber | diet:mediterranean | toilets:unisex | landuse | restaurant | panoramax:1 | building | historic | ship:type | source:name | website:en | building:levels | contact:mastodon | image | roof:levels | name:ja | name:zn | nonsquare | shop | theme | building:colour | building:material | roof:shape | contact:tiktok | house | ||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| element | id | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| node | 333786044 | POINT (-75.15893 39.94086) | Philadelphia | 735 | 19147 | PA | South 10th Street | Morning Glory Diner | restaurant | yes | https://www.facebook.com/MorningGloryDiner/ | diner | yes | Sam's Morning Glory | Mo-Fr 08:00-14:00; Sa,Su 08:00-15:00 | yes | no | no | knowledge;survey | limited | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
| 343293806 | POINT (-75.15946 39.96073) | Philadelphia | 501 | 19123 | PA | North 13th Street | NaN | pub | NaN | NaN | american;burger;fish_and_chips;sandwich | yes | Prohibition Taproom | Fr-Sa 12:00-01:00; Su 12:00-00:00; Mo-Th 16:00... | NaN | NaN | NaN | survey | NaN | yes | prohibition_taproom | yes | info@theprohibitiontaproom.com | 215-238-1818 | http://theprohibitiontaproom.com/ | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | |
| 566683522 | POINT (-75.15755 39.96205) | Philadelphia | 1139 | 19123 | NaN | Spring Garden Street | NaN | restaurant | NaN | NaN | pizza | NaN | Spring Garden Pizza & Restaurant | Mo-Fr 08:00-20:00; Sa 08:00-17:00; Su off | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | +1 215-765-7665 | https://www.springgardenpizza.com | 2023-10-11 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | |
| 596230881 | POINT (-75.18682 40.05492) | NaN | NaN | NaN | NaN | NaN | NaN | restaurant | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | |
| 596245658 | POINT (-75.19035 40.0592) | Philadelphia | 7136 | 19119 | PA | Germantown Avenue | NaN | restaurant | NaN | NaN | NaN | NaN | Earth Bread & Brewery | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | brewery | yes | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
# Get bus stop features
bus_stops = ox.features_from_place("Philadelphia, PA", tags={"highway": "bus_stop"})len(bus_stops)334
bus_stops.head()| geometry | bench | bus | covered | highway | name | network | network:wikidata | operator | public_transport | ref | shelter | network:wikipedia | tactile_paving | wheelchair | route_ref | local_ref | bin | lit | designation | source | check_date:shelter | departures_board | internet_access | addr:street | route_ref_1 | operator:wikidata | description | note | brand | brand:wikidata | railway | tram | trolleybus | network:short | not:network:wikidata | advertising | addr:city | addr:housenumber | addr:postcode | addr:state | ref:signed | fixme | sign | panoramax | ||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| element | id | |||||||||||||||||||||||||||||||||||||||||||||
| node | 361011456 | POINT (-75.16166 39.95223) | yes | yes | yes | bus_stop | 13th St & Market St | SEPTA | Q2037863 | SEPTA | platform | 10264 | yes | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
| 750281693 | POINT (-75.07732 40.01797) | NaN | yes | NaN | bus_stop | NaN | NaN | NaN | NaN | platform | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | |
| 768271130 | POINT (-75.20726 40.01487) | NaN | yes | NaN | bus_stop | Wissahickon Transportation Center | SEPTA | Q2037863 | SEPTA | platform | NaN | yes | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | |
| 1015342921 | POINT (-75.18187 39.9664) | NaN | yes | NaN | bus_stop | NaN | NaN | NaN | NaN | platform | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | |
| 1015342926 | POINT (-75.18024 39.9667) | NaN | yes | NaN | bus_stop | NaN | NaN | NaN | NaN | platform | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
# Get commercial and retail landuse features
landuse = ox.features_from_place(
"Philadelphia, PA", tags={"landuse": ["commercial", "retail"]}
)len(landuse)349
Let’s plot the land use features:
from matplotlib import pyplot as plt
fig, ax = plt.subplots(figsize=(10, 6))
ax = landuse.plot(ax=ax)
ax.set_axis_off()
Key functions: graph_from_*
graph_from_place() (docs)
graph_from_address() (docs)
graph_from_bbox() (docs)
graph_from_point() (docs)
graph_from_polygon() (docs)
Get streets within 500 meters of the center of Center City
G = ox.graph_from_address("Center City, Philadelphia, PA", dist=500)Project and plot it:
G_projected = ox.project_graph(G)
ox.plot_graph(G_projected)
Remove the nodes:
ox.plot_graph(G_projected, node_size=0);
Let’s zoom out to 2,000 meters. This will take a little longer.
G = ox.graph_from_address("Center City, Philadelphia, PA", dist=2000)
G_projected = ox.project_graph(G)ox.plot_graph(G_projected, node_size=0);
drive - get drivable public streets (but not service roads)drive_service - get drivable streets, including service roadswalk - get all streets and paths that pedestrians can use (this network type ignores one-way directionality)bike - get all streets and paths that cyclists can useall - download all non-private OSM streets and pathsall_private - download all OSM streets and paths, including private-access ones (default)# the "drive" network
G = ox.graph_from_address("Center City, Philadelphia, PA", network_type="drive", dist=2000)
ox.plot_graph(G)
# the "walk" network
G = ox.graph_from_address("Center City, Philadelphia, PA", network_type="walk", dist=2000)
ox.plot_graph(ox.project_graph(G))
Use graph_from_place() to get the streets within a specific OSM place.
A couple of things to watch out for: 1. The place query has to be resolved by OSM. 2. If the place is a big city, you might be downloading a lot of data!
Let’s check out the street network for Berkeley, CA:
berkeley = ox.graph_from_place("Berkeley, California, USA")ox.plot_graph(ox.project_graph(berkeley), node_size=0)
Example: Let’s download all streets within Center City. We will use the “Central” planning district as a proxy for this area. The city’s planning districts are available on Open Data Philly.
planning_districts = gpd.read_file(
"https://opendata.arcgis.com/datasets/0960ea0f38f44146bb562f2b212075aa_0.geojson"
)len(planning_districts)18
planning_districts.head()| objectid | dist_name | abbrev | Shape__Area | Shape__Length | geometry | |
|---|---|---|---|---|---|---|
| 0 | 1 | River Wards | RW | 3.338947e+07 | 26635.524113 | POLYGON ((-75.09798 40.00496, -75.09687 40.005... |
| 1 | 2 | North Delaware | NDEL | 4.285306e+07 | 35525.335312 | POLYGON ((-74.98159 40.05363, -74.98139 40.053... |
| 2 | 3 | Lower Far Northeast | LFNE | 4.875252e+07 | 36958.071333 | POLYGON ((-74.96443 40.11728, -74.96434 40.117... |
| 3 | 4 | Central | CTR | 2.822133e+07 | 28401.823065 | POLYGON ((-75.14791 39.96733, -75.14715 39.967... |
| 4 | 5 | University Southwest | USW | 2.051763e+07 | 25957.938149 | POLYGON ((-75.18742 39.96338, -75.18644 39.963... |
Trim to the central district:
central_district = planning_districts.query("dist_name == 'Central'")And plot it:
## old version previous OSMnx 2.0
# ax = ox.project_gdf(central_district).plot(fc="lightblue", ec="gray")
# ax.set_axis_off()
# Reproject philly to its best UTM zone
central_district_repoj = central_district.to_crs(central_district.estimate_utm_crs())
ax = central_district_repoj.plot(fc="lightblue", ec="gray")
ax.set_axis_off()
central_district, central_district_repoj.crs( objectid dist_name abbrev Shape__Area Shape__Length \
3 4 Central CTR 2.822133e+07 28401.823065
geometry
3 POLYGON ((-75.14791 39.96733, -75.14715 39.967... ,
<Projected CRS: EPSG:32618>
Name: WGS 84 / UTM zone 18N
Axis Info [cartesian]:
- E[east]: Easting (metre)
- N[north]: Northing (metre)
Area of Use:
- name: Between 78°W and 72°W, northern hemisphere between equator and 84°N, onshore and offshore. Bahamas. Canada - Nunavut; Ontario; Quebec. Colombia. Cuba. Ecuador. Greenland. Haiti. Jamaica. Panama. Turks and Caicos Islands. United States (USA). Venezuela.
- bounds: (-78.0, 0.0, -72.0, 84.0)
Coordinate Operation:
- name: UTM zone 18N
- method: Transverse Mercator
Datum: World Geodetic System 1984 ensemble
- Ellipsoid: WGS 84
- Prime Meridian: Greenwich)
Squeeze it so we can get the geometry polygon:
center_city_outline = central_district.squeeze().geometry
center_city_outline, type(center_city_outline)(<POLYGON ((-75.148 39.967, -75.147 39.967, -75.147 39.969, -75.147 39.97, -7...>,
shapely.geometry.polygon.Polygon)
Now, let’s use ox.graph_from_polygon() to extract streets within this polygon.
# Get the graph
G_cc = ox.graph_from_polygon(center_city_outline, network_type="drive")# Viola!
ox.plot_graph(ox.project_graph(G_cc), node_size=0);
Key function: ox.graph_to_gdfs() (docs)
You can get a GeoDataFrame for both the nodes (points) and edges (lines)
type(G_cc)networkx.classes.multidigraph.MultiDiGraph
# only get the edges
cc_edges = ox.graph_to_gdfs(G_cc, edges=True, nodes=False)# we have lots of data associated with each edge!
cc_edges.head()| osmid | highway | lanes | name | oneway | reversed | length | geometry | maxspeed | ref | bridge | tunnel | width | service | access | junction | |||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| u | v | key | ||||||||||||||||
| 109727439 | 109911666 | 0 | 132508434 | residential | 1 | Bainbridge Street | True | False | 44.347013 | LINESTRING (-75.17104 39.94345, -75.1706 39.94... | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
| 109727448 | 109727439 | 0 | 12109011 | residential | NaN | South Colorado Street | True | False | 109.496448 | LINESTRING (-75.17125 39.94248, -75.1712 39.94... | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
| 110034229 | 0 | 12159387 | residential | NaN | Fitzwater Street | True | False | 91.354184 | LINESTRING (-75.17125 39.94248, -75.17129 39.9... | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | |
| 109727507 | 110024052 | 0 | 193364514 | residential | NaN | Carpenter Street | True | False | 53.208442 | LINESTRING (-75.17196 39.93974, -75.17134 39.9... | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
| 109728761 | 110274344 | 0 | 672312336 | residential | NaN | Brown Street | True | False | 58.270358 | LINESTRING (-75.17317 39.96951, -75.1725 39.96... | 25 mph | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
# plot it like any old GeoDataFrame
ax = cc_edges.to_crs(epsg=3857).plot(color="gray")
# add the neighborhood boundaries
boundary = gpd.GeoSeries([center_city_outline], crs="EPSG:4326")
boundary.to_crs(epsg=3857).plot(
ax=ax, facecolor="none", edgecolor="red", linewidth=3, zorder=2
)
ax.set_axis_off()
Don’t forget: We can use the .explore() function to get an interactive web map via Folium:
cc_edges.explore(tiles='cartodb positron')And much more: see the OSMnx repository of Jupyter notebook examples
A great blog post on street orientations across different US and global cities.
One of my favorite examples of data viz, using matplotlib for radial histograms of street orientations…

The code for these histograms is available in the osmnx examples repository.
We can use the ox.basic_stats() to get some basic network statistics
ox.basic_stats(G_cc){'n': 2097,
'm': 4027,
'k_avg': 3.8407248450166906,
'edge_length_total': 357852.7307807873,
'edge_length_avg': 88.86335504861864,
'streets_per_node_avg': 3.407248450166905,
'streets_per_node_counts': {0: 0,
1: 61,
2: 12,
3: 1058,
4: 949,
5: 13,
6: 3,
7: 1},
'streets_per_node_proportions': {0: 0.0,
1: 0.029089175011921792,
2: 0.005722460658082976,
3: 0.5045302813543157,
4: 0.452551263710062,
5: 0.00619933237958989,
6: 0.001430615164520744,
7: 0.0004768717215069146},
'intersection_count': 2036,
'street_length_total': 311421.4931922978,
'street_segment_count': 3484,
'street_length_avg': 89.38619207586045,
'circuity_avg': 1.0159857056912147,
'self_loop_proportion': 0.000574052812858783}
Let’s calculate the shortest route between the Art Museum and the Liberty Bell.
We’ll need to download all amenities in Philadelphia of type “tourism”.
ox.features_from_place() can download OSM features with a specific tagphilly_tourism = ox.features_from_place("Philadelphia, PA", tags={"tourism": True})len(philly_tourism)928
philly_tourism.head()| geometry | ele | gnis:feature_id | name | tourism | addr:city | addr:housenumber | addr:postcode | addr:state | addr:street | air_conditioning | brand | brand:wikidata | internet_access | operator | phone | website | artwork_type | historic | source | wikidata | information | artist_name | material | check_date | contact:facebook | fee | colour | start_date | wheelchair | wikipedia | addr:country | landmark | name:de | opening_hours | designation | amenity | description | museum | operator:type | alt_name | artwork_subject | artist:wikidata | height | subject:wikidata | name:fr | statue | memorial | subject:wikipedia | year_of_construction | name:ru | contact:email | branch | ref | panoramax | board_type | contact:instagram | toilets:wheelchair | loc_name | inscription | level | natural | attraction | note | wikimedia_commons | location | display | support | end_date | comment | layer | historic:amenity | postal_code | official_name | brand:short | short_name | guest_house | inscription:url | gender | bicycle | hiking | covered | drinking_water | openfire | internet_access:fee | rooms | addr:unit | old_name | image | mimics | source:url | direction | board:title | departures_board | direction_southeast | horse | mtb | map_size | map_type | access | direction_east | direction_north | direction_west | name:signed | direction_southwest | guidepost | direction_northeast | direction_northwest | ref:signed | direction_south | fixme | noname | check_date:opening_hours | opening_hours:signed | bar | swimming_pool | highway | lanes | name:etymology | oneway | service | surface | tiger:cfcc | tiger:name_base | tiger:name_type | tiger:zip_left | tiger:zip_right | building | building:material | ref:nrhp | building:levels | name:hi | roof:shape | building:wikidata | building:wikipedia | heritage | heritage:operator | heritage:website | nrhp:criteria | nrhp:inscription_date | nrhp:nhl | protection_title | source_ref | smoking | building:colour | fax | contact:fax | contact:phone | ship:type | addr:housename | disused:amenity | roof:material | abandoned:amenity | internet_access:ssid | old_name:2015 | parking | old_name:1994-2015 | fee:conditional | shop | roof:levels | mtb:scale:imba | name:zh | artist:website | bridge | foot | lit | trail_visibility | width | bridge:structure | man_made | barrier | leisure | disused:website | contact:website | boundary | operator:short | operator:wikidata | ownership | protected | building:part | name:en | area | subject | tower:construction | tower:type | area:highway | step_count | type | roof:colour | place | |||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| element | id | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| node | 357371322 | POINT (-75.1958 39.9697) | 17 | 2347097 | Bird Lake Picnic Area | picnic_site | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
| 360500844 | POINT (-75.19582 39.95352) | NaN | NaN | Hilton Inn at Penn | hotel | Philadelphia | 3600 | 19104 | PA | Sansom Street | yes | Hilton | Q598884 | PHLID_Hotel@hilton.com | wlan | Hilton | +1-215-222-0200 | https://www.hilton.com/en/hotels/phlidhh-the-i... | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | |
| 360515304 | POINT (-75.1486 39.94771) | NaN | NaN | Robert Morris | artwork | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | statue | memorial | survey | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | |
| 360542779 | POINT (-75.18932 39.9554) | NaN | NaN | Mario the Magnificent | artwork | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | statue | NaN | NaN | Q98563440 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | |
| 360777728 | POINT (-75.19021 39.9523) | NaN | NaN | Pennsylvania Historical Marker: ENIAC, first a... | information | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | board | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
# How to find the name of the POI: search for keywords
philly_tourism.loc[philly_tourism['name'].str.contains("Art", na=False)]| geometry | ele | gnis:feature_id | name | tourism | addr:city | addr:housenumber | addr:postcode | addr:state | addr:street | air_conditioning | brand | brand:wikidata | internet_access | operator | phone | website | artwork_type | historic | source | wikidata | information | artist_name | material | check_date | contact:facebook | fee | colour | start_date | wheelchair | wikipedia | addr:country | landmark | name:de | opening_hours | designation | amenity | description | museum | operator:type | alt_name | artwork_subject | artist:wikidata | height | subject:wikidata | name:fr | statue | memorial | subject:wikipedia | year_of_construction | name:ru | contact:email | branch | ref | panoramax | board_type | contact:instagram | toilets:wheelchair | loc_name | inscription | level | natural | attraction | note | wikimedia_commons | location | display | support | end_date | comment | layer | historic:amenity | postal_code | official_name | brand:short | short_name | guest_house | inscription:url | gender | bicycle | hiking | covered | drinking_water | openfire | internet_access:fee | rooms | addr:unit | old_name | image | mimics | source:url | direction | board:title | departures_board | direction_southeast | horse | mtb | map_size | map_type | access | direction_east | direction_north | direction_west | name:signed | direction_southwest | guidepost | direction_northeast | direction_northwest | ref:signed | direction_south | fixme | noname | check_date:opening_hours | opening_hours:signed | bar | swimming_pool | highway | lanes | name:etymology | oneway | service | surface | tiger:cfcc | tiger:name_base | tiger:name_type | tiger:zip_left | tiger:zip_right | building | building:material | ref:nrhp | building:levels | name:hi | roof:shape | building:wikidata | building:wikipedia | heritage | heritage:operator | heritage:website | nrhp:criteria | nrhp:inscription_date | nrhp:nhl | protection_title | source_ref | smoking | building:colour | fax | contact:fax | contact:phone | ship:type | addr:housename | disused:amenity | roof:material | abandoned:amenity | internet_access:ssid | old_name:2015 | parking | old_name:1994-2015 | fee:conditional | shop | roof:levels | mtb:scale:imba | name:zh | artist:website | bridge | foot | lit | trail_visibility | width | bridge:structure | man_made | barrier | leisure | disused:website | contact:website | boundary | operator:short | operator:wikidata | ownership | protected | building:part | name:en | area | subject | tower:construction | tower:type | area:highway | step_count | type | roof:colour | place | |||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| element | id | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| node | 367974278 | POINT (-75.1524 40.03748) | 61 | 2349240 | La Salle University Art Museum | museum | Philadelphia | 1900 | NaN | PA | West Olney Avenue | NaN | NaN | NaN | NaN | NaN | NaN | NaN | https://artcollection.lasalle.edu/ | NaN | NaN | USGS Geonames | Q16893816 | NaN | NaN | NaN | 2024-08-25 | https://www.facebook.com/LaSalleUniversityArtM... | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
| 4064343335 | POINT (-75.22113 40.02427) | NaN | NaN | Soft Illusions Fine Art Gallery | gallery | Philadelphia | 4226 | 19127 | PA | Main Street | NaN | NaN | NaN | NaN | NaN | NaN | +1-215-840-0832 | http://www.softillusions.net/ | NaN | NaN | NaN | NaN | NaN | NaN | NaN | 2025-06-01 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | |
| 5368454121 | POINT (-75.19477 39.95406) | NaN | NaN | Institute of Contemporary Art | museum | Philadelphia | 118 | 19104 | PA | South 36th Street | NaN | NaN | NaN | NaN | NaN | NaN | +1 215-898-5911 | https://icaphila.org | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | ICAPhiladelphia | no | NaN | NaN | yes | NaN | NaN | NaN | NaN | We-Su 12:00-18:00 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | ICAPhiladelphia | yes | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | |
| 5718906477 | POINT (-75.13058 39.99573) | NaN | NaN | Art Making Machine Studios | gallery | Philadelphia | 3000 | 19133 | PA | Hope Street | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | |
| 6639391809 | POINT (-75.16088 39.96383) | NaN | NaN | Philadelphia Museum of Jewish Art | museum | Philadelphia | 615 | 19123 | PA | North Broad Street | NaN | NaN | NaN | NaN | NaN | NaN | +1 215-627-6747 | https://rodephshalom.org/community/philadelphi... | NaN | NaN | NaN | NaN | NaN | NaN | NaN | 2023-10-11 | NaN | no | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | |
| 6680708848 | POINT (-75.16833 39.94733) | NaN | NaN | Romanian Folk Art Museum | museum | Philadelphia | 1606 | 19103 | PA | Spruce Street | NaN | NaN | NaN | NaN | NaN | NaN | NaN | http://www.romanianculture.us/ | NaN | NaN | NaN | Q113484178 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | |
| 12188327106 | POINT (-75.14215 39.95191) | NaN | NaN | Arch Enemy Arts | gallery | Philadelphia | 109 | 19106 | PA | Arch Street | NaN | NaN | NaN | NaN | NaN | NaN | +1 215-717-7774 | https://www.archenemyarts.com/ | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | |
| 12193292355 | POINT (-75.14336 39.9522) | NaN | NaN | Twelve Gates Arts | gallery | Philadelphia | 106 | 19106 | PA | North 2nd Street | NaN | NaN | NaN | NaN | NaN | NaN | +1 215 253-8578 | https://www.twelvegatesarts.org/ | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | |
| 12222614599 | POINT (-75.14334 39.95113) | NaN | NaN | Larry Becker Contemporary Art | gallery | Philadelphia | 43 | 19106 | PA | North 2nd Street | NaN | NaN | NaN | NaN | NaN | NaN | +1-215-925-5389 | https://www.artnet.com/galleries/larry-becker-... | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | no | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | 2025-02-22 | no | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | |
| 12235452452 | POINT (-75.14486 39.95339) | NaN | NaN | Museum for Art in Wood | museum | Philadelphia | 141 | 19106 | PA | North 3rd Street | NaN | NaN | NaN | NaN | NaN | NaN | +1-215-923-8000 | https://museumforartinwood.org/ | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | We-Su 12:00-17:00; Mo-Tu off | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | |
| way | 28533972 | POLYGON ((-75.18117 39.96468, -75.18141 39.964... | 32 | NaN | Philadelphia Art Museum | museum | Philadelphia | 2600 | 19130 | PA | Benjamin Franklin Parkway | NaN | NaN | NaN | NaN | NaN | NaN | +1-215-763-8100 | https://www.philamuseum.org/ | NaN | NaN | NaN | Q510324 | NaN | NaN | NaN | 2025-10-08 | NaN | yes | NaN | NaN | yes | en:Philadelphia Museum of Art | NaN | NaN | NaN | Su,Mo,Th,Sa 10:00-17:00; Fr 10:00-20:45 | NaN | NaN | NaN | art | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | Philadelphia Museum of Art | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | yes | NaN | NaN | 4 | फिलाडेल्फिया कला संग्रहालय | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
| 333931830 | POLYGON ((-75.1641 39.95543, -75.16416 39.9551... | 13 | 1196718 | Pennsylvania Academy of the Fine Arts | museum | Philadelphia | 118 | 19102 | PA | North Broad Street | NaN | NaN | NaN | NaN | NaN | NaN | +1-215-972-7600 | https://www.pafa.org/ | NaN | building | NaN | Q1952033 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | en:Pennsylvania Academy of the Fine Arts | US | NaN | NaN | Tu-Fr 10:00-17:00; Sa-Su 11:00-17:00 | NaN | NaN | NaN | art | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | yes | NaN | 71000731 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | |
| 988345364 | POLYGON ((-75.21926 40.0832, -75.21931 40.0832... | 84 | NaN | Woodmere Art Museum | museum | Philadelphia | 9201 | 19118 | PA | Germantown Avenue | NaN | NaN | NaN | NaN | NaN | NaN | NaN | https://woodmereartmuseum.org/ | NaN | NaN | esri/Philadelphia_PA_Buildings_OSM | Q2424929 | NaN | NaN | NaN | NaN | NaN | yes | NaN | NaN | yes | NaN | NaN | NaN | NaN | We-Su 10:00-17:00; Sa 10:00-18:00 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | 20.72 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | 2023-06-10 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | yes | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
art_museum = philly_tourism.query("name == 'Philadelphia Art Museum'").squeeze()
art_museum.geometryGeoSeries([], Name: geometry, dtype: geometry)
liberty_bell = philly_tourism.query("name == 'Liberty Bell'").squeeze()
liberty_bell.geometryNow, extract the lat and lng coordinates
For the Art Museum geometry, we can use the .geometry.centroid attribute to calculate the centroid of the building footprint.
liberty_bell_x = liberty_bell.geometry.x
liberty_bell_y = liberty_bell.geometry.yart_museum_x = art_museum.geometry.centroid.x
art_museum_y = art_museum.geometry.centroid.y/var/folders/7g/px0llbj54z37p076r6853ggh0000gn/T/ipykernel_35275/66102783.py:1: UserWarning: Geometry is in a geographic CRS. Results from 'centroid' are likely incorrect. Use 'GeoSeries.to_crs()' to re-project geometries to a projected CRS before this operation.
art_museum_x = art_museum.geometry.centroid.x
/var/folders/7g/px0llbj54z37p076r6853ggh0000gn/T/ipykernel_35275/66102783.py:2: UserWarning: Geometry is in a geographic CRS. Results from 'centroid' are likely incorrect. Use 'GeoSeries.to_crs()' to re-project geometries to a projected CRS before this operation.
art_museum_y = art_museum.geometry.centroid.y
Find the nearest nodes on our OSMnx graph, using the ox.nearest_nodes() function
ox.nearest_nodes?Signature: ox.nearest_nodes(G, X, Y, return_dist=False) Docstring: Find the nearest node to a point or to each of several points. If `X` and `Y` are single coordinate values, this will return the nearest node to that point. If `X` and `Y` are lists of coordinate values, this will return the nearest node to each point. If the graph is projected, this uses a k-d tree for euclidean nearest neighbor search, which requires that scipy is installed as an optional dependency. If it is unprojected, this uses a ball tree for haversine nearest neighbor search, which requires that scikit-learn is installed as an optional dependency. Parameters ---------- G : networkx.MultiDiGraph graph in which to find nearest nodes X : float or list points' x (longitude) coordinates, in same CRS/units as graph and containing no nulls Y : float or list points' y (latitude) coordinates, in same CRS/units as graph and containing no nulls return_dist : bool optionally also return distance between points and nearest nodes Returns ------- nn or (nn, dist) : int/list or tuple nearest node IDs or optionally a tuple where `dist` contains distances between the points and their nearest nodes File: ~/mambaforge/envs/musa-550-fall-2023/lib/python3.10/site-packages/osmnx/distance.py Type: function
art_museum_ySeries([], dtype: float64)
# Get the origin node
orig_node = ox.nearest_nodes(G_cc, liberty_bell_x, liberty_bell_y)
# Get the destination node
dest_node = ox.nearest_nodes(G_cc, art_museum_x, art_museum_y)--------------------------------------------------------------------------- ValueError Traceback (most recent call last) Cell In[101], line 5 2 orig_node = ox.nearest_nodes(G_cc, liberty_bell_x, liberty_bell_y) 4 # Get the destination node ----> 5 dest_node = ox.nearest_nodes(G_cc, art_museum_x, art_museum_y) File /opt/anaconda3/envs/geospatial/lib/python3.10/site-packages/osmnx/distance.py:375, in nearest_nodes(G, X, Y, return_dist) 373 nodes_rad = np.deg2rad(nodes[["y", "x"]]) 374 points_rad = np.deg2rad(np.array([Y_arr, X_arr]).T) --> 375 dist_array, pos = BallTree(nodes_rad, metric="haversine").query(points_rad, k=1) 376 dist_array = dist_array[:, 0] * EARTH_RADIUS_M # convert radians -> meters 377 nn_array = nodes.index[pos[:, 0]].to_numpy() File sklearn/neighbors/_binary_tree.pxi:1173, in sklearn.neighbors._ball_tree.BinaryTree64.query() File /opt/anaconda3/envs/geospatial/lib/python3.10/site-packages/sklearn/utils/validation.py:1128, in check_array(array, accept_sparse, accept_large_sparse, dtype, order, copy, force_writeable, force_all_finite, ensure_all_finite, ensure_non_negative, ensure_2d, allow_nd, ensure_min_samples, ensure_min_features, estimator, input_name) 1126 n_samples = _num_samples(array) 1127 if n_samples < ensure_min_samples: -> 1128 raise ValueError( 1129 "Found array with %d sample(s) (shape=%s) while a" 1130 " minimum of %d is required%s." 1131 % (n_samples, array.shape, ensure_min_samples, context) 1132 ) 1134 if ensure_min_features > 0 and array.ndim == 2: 1135 n_features = array.shape[1] ValueError: Found array with 0 sample(s) (shape=(0, 2)) while a minimum of 1 is required.
Now, we can use ox.shortest_path() function to find the shortest path between these graph nodes.
We need to specify weight=‘length’ to find the shortest path by minimizing distance traveled (otherwise it treats each edge as weight=1).
# get the shortest path --> just a list of node IDs
route1 = ox.shortest_path(G_cc, orig_node, dest_node, weight="length")
route1[3408446156,
110217312,
3425012161,
109814427,
5372039288,
109814445,
109814449,
5358069713,
5372059864,
2644235371,
5534891499,
110540235,
109750941,
110402209,
110402230,
534960802,
110391250,
637791907,
637791980,
110329803,
110329806,
775897224,
3414249481,
110329822,
110391452,
110353061,
11162290432,
110054089,
775897147,
110329848,
110329851,
110125895,
534969088,
109745905,
109740423,
110330569,
550175399]
Use ox.plot_graph_route() to plot a graph and highlight a specific route
ox.plot_graph_route(G_cc, route1, node_size=0);
How about an interactive version?
osmnx has a helper function ox.utils_graph.route_to_gdf() to convert a route to a GeoDataFrame of edges.
# ox.utils_graph.route_to_gdf(G_cc, route1, weight="length").explore(
# tiles="cartodb positron",
# color="red",
# )
## new OSMnx 2.0 version
import osmnx as ox
# New import location
from osmnx import routing
# Convert route to GeoDataFrame
gdf_route = routing.route_to_gdf(G_cc, route1, weight="length")
# Explore with folium/leafmap
gdf_route.explore(
tiles="cartodb positron",
color="red"
)The add_edge_speeds function add edge speeds (km per hour) to graph as new speed_kph edge attributes.
The function will add free-flow travel speeds for all edges based on the average maxspeed value of edges, per highway type. This process can definitely be imprecise, but in the case that you happen to have more precise speed data, you can supply your own data instead of relying on OSM data.
# impute speed on all edges missing data
G_cc = ox.add_edge_speeds(G_cc)
# calculate travel time (seconds) for all edges
G_cc = ox.add_edge_travel_times(G_cc)# Get the graph edges
edges = ox.graph_to_gdfs(G_cc, nodes=False)edges.head()| osmid | highway | lanes | name | oneway | reversed | length | geometry | speed_kph | travel_time | maxspeed | ref | bridge | tunnel | width | service | access | junction | |||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| u | v | key | ||||||||||||||||||
| 109727439 | 109911666 | 0 | 132508434 | residential | 1 | Bainbridge Street | True | False | 44.347013 | LINESTRING (-75.17104 39.94345, -75.1706 39.94... | 38.501215 | 4.146603 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
| 109727448 | 109727439 | 0 | 12109011 | residential | NaN | South Colorado Street | True | False | 109.496448 | LINESTRING (-75.17125 39.94248, -75.1712 39.94... | 38.501215 | 10.238306 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
| 110034229 | 0 | 12159387 | residential | NaN | Fitzwater Street | True | False | 91.354184 | LINESTRING (-75.17125 39.94248, -75.17129 39.9... | 38.501215 | 8.541940 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | |
| 109727507 | 110024052 | 0 | 193364514 | residential | NaN | Carpenter Street | True | False | 53.208442 | LINESTRING (-75.17196 39.93974, -75.17134 39.9... | 38.501215 | 4.975178 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
| 109728761 | 110274344 | 0 | 672312336 | residential | NaN | Brown Street | True | False | 58.270358 | LINESTRING (-75.17317 39.96951, -75.1725 39.96... | 40.233500 | 5.213896 | 25 mph | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
# Groupby highway type and get the mean values
edges["highway"] = edges["highway"].astype(str)
edges.groupby("highway")[["length", "speed_kph", "travel_time"]].mean()| length | speed_kph | travel_time | |
|---|---|---|---|
| highway | |||
| ['residential', 'unclassified'] | 258.436611 | 40.233500 | 23.124307 |
| ['tertiary', 'motorway_link'] | 151.598640 | 40.233500 | 13.564694 |
| living_street | 52.876864 | 46.222619 | 4.118259 |
| motorway | 432.116867 | 81.085977 | 18.662521 |
| motorway_link | 306.735864 | 46.222619 | 23.889800 |
| primary | 102.944142 | 43.970544 | 8.436790 |
| primary_link | 55.344736 | 40.233500 | 4.952118 |
| residential | 80.858445 | 38.499816 | 7.586837 |
| secondary | 93.071002 | 42.532557 | 8.026738 |
| secondary_link | 57.032287 | 40.233500 | 5.103116 |
| tertiary | 77.746546 | 41.352463 | 6.787090 |
| tertiary_link | 39.973430 | 40.233500 | 3.576730 |
| trunk | 69.430842 | 56.326900 | 4.437507 |
| trunk_link | 179.573840 | 46.222619 | 13.985919 |
| unclassified | 114.078736 | 37.757592 | 11.042156 |
# calculate two routes by minimizing travel time
route2 = ox.shortest_path(G_cc, orig_node, dest_node, weight="travel_time")# plot the routes
fig, ax = ox.plot_graph_routes(
G_cc,
routes=[route1, route2],
route_colors=["r", "y"],
route_linewidth=6,
node_size=0,
)
Let’s plot both in an interactive map:
# m = ox.utils_graph.route_to_gdf(G_cc, route1, weight="length").explore(
# tiles="cartodb dark matter",
# color="red",
# )
# m = ox.utils_graph.route_to_gdf(G_cc, route2, weight="length").explore(
# tiles="cartodb dark matter",
# color="yellow",
# m=m
# )
from osmnx import routing # new location for route_to_gdf
# First route
gdf_route1 = routing.route_to_gdf(G_cc, route1, weight="length")
m = gdf_route1.explore(
tiles="cartodb dark_matter",
color="red"
)
# Second route on same map
gdf_route2 = routing.route_to_gdf(G_cc, route2, weight="length")
m = gdf_route2.explore(
tiles="cartodb dark_matter",
color="yellow",
m=m
)
mLet’s compare to the two routes:
Distances:
# meters_to_miles = 0.0006213712
# # compare the two routes
# route1_length = (
# ox.utils_graph.route_to_gdf(G_cc, route1, weight="length")["length"].sum()
# * meters_to_miles
# )
# route2_length = (
# ox.utils_graph.route_to_gdf(G_cc, route2, weight="length")["length"].sum()
# * meters_to_miles
# )
import osmnx as ox
from osmnx import routing # new module for route_to_gdf
meters_to_miles = 0.0006213712
# Compare the two routes
route1_length = (
routing.route_to_gdf(G_cc, route1, weight="length")["length"].sum()
* meters_to_miles
)
route2_length = (
routing.route_to_gdf(G_cc, route2, weight="length")["length"].sum()
* meters_to_miles
)
print(f"Route 1 length: {route1_length:.2f} miles")
print(f"Route 2 length: {route2_length:.2f} miles")Route 1 length: 2.19 miles
Route 2 length: 2.46 miles
Travel times:
seconds_to_mins = 1.0 / 60
# route1_time = (
# ox.utils_graph.route_to_gdf(G_cc, route1, weight="travel_time")["travel_time"].sum()
# * seconds_to_mins
# )
# route2_time = (
# ox.utils_graph.route_to_gdf(G_cc, route2, weight="travel_time")["travel_time"].sum()
# * seconds_to_mins
# )
route1_time = (
routing.route_to_gdf(G_cc, route1, weight="travel_time")["travel_time"].sum()
* seconds_to_mins
)
route2_time = (
routing.route_to_gdf(G_cc, route2, weight="travel_time")["travel_time"].sum()
* seconds_to_mins
)Summarize:
print(f"Route 1 is {route1_length:.2f} miles and takes {route1_time:.2f} minutes.")
print(f"Route 2 is {route2_length:.2f} miles and takes {route2_time:.2f} minutes.")Route 1 is 2.19 miles and takes 5.18 minutes.
Route 2 is 2.46 miles and takes 4.57 minutes.
“Pandas Network Analysis - dataframes of network queries, quickly”
A complementary set of OSM-related features: - Downloading OSM-based networks - Extracting amenity data (so-called “Points of Interest”) - Calculating network-constrained distances
# !pip install pandanaimport pandana as pnda
from pandana.loaders import osmKey function: osm.node_query()
ox.features_from_bbox() function in OSMnx, but we slightly different syntax.osm.node_query?Signature: osm.node_query(lat_min, lng_min, lat_max, lng_max, tags=None) Docstring: Search for OSM nodes within a bounding box that match given tags. Parameters ---------- lat_min, lng_min, lat_max, lng_max : float tags : str or list of str, optional Node tags that will be used to filter the search. See http://wiki.openstreetmap.org/wiki/Overpass_API/Language_Guide for information about OSM Overpass queries and http://wiki.openstreetmap.org/wiki/Map_Features for a list of tags. Returns ------- nodes : pandas.DataFrame Will have 'lat' and 'lon' columns, plus other columns for the tags associated with the node (these will vary based on the query). Index will be the OSM node IDs. File: ~/mambaforge/envs/musa-550-fall-2023/lib/python3.10/site-packages/pandana/loaders/osm.py Type: function
Get the bounding box:
boundary = center_city_outline.bounds
boundary, type(boundary)((-75.1935824529863, 39.9286257450625, -75.1259307965394, 39.9738724134054),
tuple)
[lng_min, lat_min, lng_max, lat_max] = boundary# query OSM
poi_df = osm.node_query(lat_min, lng_min, lat_max, lng_max)
# remove missing data
poi_df = poi_df.dropna(subset=["amenity"])poi_df.head()| lat | lon | railway | light_rail | name | network | operator | public_transport | wheelchair | highway | ... | hgv | maxstay | network:website | payment:app:tesla | ref:supercharge_info | scooter | socket:nacs | socket:nacs:output | diet:mediterranean | restaurant | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| id | |||||||||||||||||||||
| 110237774 | 39.950401 | -75.156620 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | ... | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
| 274216093 | 39.957640 | -75.191254 | NaN | NaN | Citibank | NaN | Citibank | NaN | NaN | NaN | ... | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
| 274217596 | 39.953015 | -75.192289 | NaN | NaN | Starbucks | NaN | NaN | NaN | NaN | NaN | ... | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
| 313440966 | 39.963935 | -75.166939 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | ... | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
| 313440968 | 39.963978 | -75.170407 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | ... | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
5 rows × 604 columns
len(poi_df)2897
poi_df[["lat", "lon", "amenity"]].head(10)| lat | lon | amenity | |
|---|---|---|---|
| id | |||
| 110237774 | 39.950401 | -75.156620 | parking_entrance |
| 274216093 | 39.957640 | -75.191254 | atm |
| 274217596 | 39.953015 | -75.192289 | cafe |
| 313440966 | 39.963935 | -75.166939 | car_sharing |
| 313440968 | 39.963978 | -75.170407 | car_sharing |
| 326519551 | 39.944261 | -75.132616 | ferry_terminal |
| 333786044 | 39.940858 | -75.158928 | restaurant |
| 333786095 | 39.941924 | -75.157357 | cafe |
| 333786448 | 39.942642 | -75.157958 | bank |
| 333786774 | 39.943102 | -75.160030 | pharmacy |
For the full list of amenities, see the OSM Wikipedia
import altair as alt # Import Altair first
chart = (
alt.Chart(poi_df)
.mark_bar()
.encode(y=alt.Y("amenity", sort="-x"), x="count()", tooltip=["amenity", "count()"])
)
chart